home *** CD-ROM | disk | FTP | other *** search
/ Merciful 2 / Merciful - Disc 2.iso / software / d / dialupv3.06.lha / dialup / util.c < prev   
C/C++ Source or Header  |  1996-01-29  |  4KB  |  188 lines

  1. #include "dialup.h"
  2.  
  3. extern BPTR                    mystderr;
  4. extern const UBYTE             *prgname;
  5. extern struct IOExtSer        *serialIOReq;
  6. extern struct timerequest    *timereq;
  7. extern BPTR                    repfile;
  8. extern UBYTE                *rxbuffer;
  9. extern LONG                    arg[];
  10. extern struct argspec        argtab[];
  11.  
  12.  
  13. /* check for second start: */
  14. BOOL
  15. unique(struct MsgPort *serialport)
  16. {
  17.     Disable();
  18.     if( serialport = FindPort(SERPORTNAME) )
  19.     {
  20.         Signal( serialport->mp_SigTask, SIGBREAKF_CTRL_C );
  21.         Enable();
  22.         DisplayBeep(NULL);
  23.         return(FALSE);
  24.     };
  25.     Enable();
  26.     _OK_;
  27. }
  28.  
  29.  
  30.  
  31. /* init defaults for parameters: */
  32. void
  33. initDefaultsAndTemplate(UBYTE *wptr)
  34. {
  35.     enum argnames argcnt = A_CMD;     /* first command */
  36.     while ( 1 )
  37.     {
  38.         wptr += sprintf(wptr, argtab[argcnt].name);
  39.         arg[argcnt] = argtab[argcnt].deflt;
  40.         if ( A_ALL == ++argcnt )
  41.             break;
  42.         *wptr++ = ',';
  43.     }
  44. }
  45.  
  46.  
  47.  
  48. #define MAXARGNAMELEN 30
  49. /* build defaults template: */
  50. BOOL
  51. initDefaultsTemplate(UBYTE *wptr, LONG argd[])
  52. {
  53.     UBYTE argnamebuf[MAXARGNAMELEN];
  54.     enum argnames argcnt = A_CMD;     /* first command */
  55.     while ( 1 )
  56.     {
  57.         UBYTE *sptr;
  58.  
  59.         if ( strlen(argtab[argcnt].name) > MAXARGNAMELEN - 3)
  60.             return(FALSE);
  61.         strcpy( argnamebuf, argtab[argcnt].name );
  62.         if ( sptr = strchr(argnamebuf, '/' ) )
  63.         {
  64.             sptr[1] = 'S';
  65.             sptr[2] = '\0';
  66.         }
  67.         wptr += sprintf(wptr, argnamebuf );
  68.         argd[argcnt] = NULL;
  69.         if ( A_END == ++argcnt )
  70.             break;
  71.         *wptr++ = ',';
  72.     };
  73.     _OK_;
  74. }
  75.  
  76.  
  77.  
  78. void
  79. showdefaults(LONG argd[])
  80. {
  81.     enum argnames argcnt;
  82.     BOOL anyopt = FALSE;
  83.  
  84.     for ( argcnt = A_END - 2; argcnt > A_CMD || !anyopt ; argcnt--)
  85.     {
  86.         if ( argd[argcnt] || argd[A_ALL] )
  87.         {
  88.             UBYTE pnc = 0;
  89.  
  90.             FPrintf(Output(), "%s: ", argtab[argcnt].name);
  91.             if    ( strstr( argtab[argcnt].name, "/N" ) )
  92.                 FPrintf(Output(), "%d\n", *(LONG *)arg[argcnt] );
  93.             else if ( strstr( argtab[argcnt].name, "/M" ) )
  94.             {
  95.                 while (  ((UBYTE **)arg[argcnt])[pnc] )
  96.                     FPrintf(Output(), "%s ", ((UBYTE **)arg[argcnt])[pnc++]);
  97.                 FPrintf(Output(), "\n");
  98.             }
  99.             else if ( strstr( argtab[argcnt].name, "/S" ) )
  100.                 FPrintf(Output(), "%s\n", arg[argcnt] ? "ON" : "OFF" );
  101.             else
  102.                 FPrintf(Output(), "%s\n", arg[argcnt] ? (UBYTE *)arg[argcnt] : "*NO DEFAULT*" );
  103.             anyopt = TRUE;
  104.         };
  105.     };
  106. }
  107.  
  108.  
  109.  
  110. BOOL
  111. initSerialLine(struct SP *serpara)
  112. {
  113.     /* setting serial parameters ?*/
  114.     if ( ! arg[A_NSI] )        /* if modem is online it doesn't autodetect baudrate on AT and the parameters should be correct anyway */
  115.     {
  116.         serialIOReq->IOSer.io_Command                = SDCMD_SETPARAMS;
  117.         serialIOReq->io_SerFlags                    &= ~SERF_PARTY_ON;
  118.         serialIOReq->io_SerFlags                    |= (SERF_RAD_BOOGIE | SERF_XDISABLED);
  119.         if ( serpara->serHWHS )
  120.             serialIOReq->io_SerFlags                |= SERF_7WIRE;
  121.         serialIOReq->io_ExtFlags                    = 0;
  122.         serialIOReq->io_Baud                        = serpara->serBaudRate;
  123.         VERIFY ( DoIO((struct IORequest *)serialIOReq) == NULL );
  124.     };
  125.  
  126.     /* flush device */
  127.     serialIOReq->IOSer.io_Command  = CMD_FLUSH;
  128.     VERIFY ( DoIO((struct IORequest *)serialIOReq) == NULL)
  129.  
  130.     for(;;) /* sink all incomming data to NIL:  */
  131.     {
  132.         serialIOReq->IOSer.io_Command  = SDCMD_QUERY;
  133.         DoIO((struct IORequest *)serialIOReq);
  134.         if( serialIOReq->IOSer.io_Actual == 0 )
  135.             break;
  136.         serialIOReq->IOSer.io_Command  = CMD_READ;
  137.         serialIOReq->IOSer.io_Length   = serialIOReq->IOSer.io_Actual;
  138.         serialIOReq->IOSer.io_Data       = (APTR)rxbuffer;
  139.         VERIFY ( DoIO((struct IORequest *)serialIOReq) == NULL );
  140.         Delay(9);    /* wait for the line to get quiet */
  141.     };
  142.     _OK_
  143. }
  144.  
  145.  
  146.  
  147. void
  148. buildMatchStringArray( UBYTE *pattern, UBYTE *buf, UBYTE *msa[] )
  149. {
  150.     USHORT mcnt;
  151.     UBYTE *spt;
  152.  
  153.     /* I want to modify the string, but the prg should be residentable (pure)! */
  154.     strcpy(buf, pattern);
  155.     /* build match pointer array of string with matches: */
  156.     for (mcnt = 0; mcnt < MAXMATCHSTRING - 1; mcnt++)
  157.     {
  158.         if ( !( spt = strrchr( buf , '|' ) ) )
  159.             break;
  160.         *spt = '\0';
  161.         msa[mcnt] = spt + 1;
  162.     };
  163.     msa[mcnt] = buf;
  164.     msa[mcnt + 1] = NULL;
  165. }
  166.  
  167.  
  168.  
  169. UBYTE *
  170. matchString( UBYTE *string, UBYTE *msa[])
  171. {
  172.     UBYTE *sptr;
  173.     while ( *msa && !stcpm(string, *msa, &sptr) )
  174.         msa++;
  175.     return ( *msa ? sptr : NULL );
  176. }
  177.  
  178.  
  179.  
  180. UBYTE *
  181. sStrMatch(UBYTE *string, UBYTE *pattern, UBYTE *buf)
  182. {
  183.     UBYTE *msa[MAXMATCHSTRING];
  184.     buildMatchStringArray(pattern, buf, msa);
  185.     return( matchString( string, msa) );
  186. }
  187.  
  188.